/* Our own header, to be included *after* all standard system headers */
//unix高级环境编程书后附头文件用于使用扫描文件夹
#ifndef __ourhdr_h
#define __ourhdr_h
#include         <sys/types.h> /* required for some of our prototypes */
#include         <stdio.h> /* for convenience */
#include         <stdlib.h> /* for convenience */
#include         <string.h> /* for convenience */
#include         <unistd.h> /* for convenience */
#define MAXLINE 4096   /* max line length */
#define FILE_MODE        (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
   /* default file access permissions for n w files */
#define DIR_MODE         (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
   /* default permissions for new direc
      tori
      s */
typedef void Sigfunc (int); /* for signal handlers */

   /* 4.3BSD Reno <signal.h> doesn't de
      fine
      SIG_ERR */
#if      defined(SIG_IGN) && !defined(SIG_ERR)
#define SIG_ERR ((Sigfunc *)-1)
#endif /*   */
#define min(a,b)         ((a) < (b) ? (a) : (b))
#define max(a,b)         ((a) > (b) ? (a) : (b))
   /* prototypes for our own functions 
    */
char *path_alloc (int *); /* {Prog pathalloc} */
int open_max (void);   /* {Prog openmax} */
void clr_fl (int, int);   /* {Prog setfl} */
void set_fl (int, int);   /* {Prog setfl} */
void pr_exit (int);   /* {Prog prexit} */
void pr_mask (const char *); /* {Prog prmask} */
Sigfunc *signal_intr (int, Sigfunc *); /* {Prog signal_intr_function} */
int tty_cbreak (int);   /* {Prog raw} */
int tty_raw (int);   /* {Prog raw} */
int tty_reset (int);   /* {Prog raw} */
void tty_atexit (void);   /* {Prog raw} */

#ifdef   ECHO    /* only if <termios.h> has been included */
struct termios *tty_termios (void); /* {Prog raw} */

#endif /*   */
void sleep_us (unsigned int); /* {Ex sleepus} */
ssize_t readn (int, void *, size_t); /* {Prog readn} */
ssize_t writen (int, const void *, size_t); /* {Prog writen} */
int daemon_init (void);   /* {Prog daemoninit}
      */
int s_pipe (int *);   /* {Progs svr4_spipe
        bsd
        spipe} */
int recv_fd (int, ssize_t (*func) (int, const void *, size_t));

   /* {
      Prog
      recvfd_svr4 recvfd_43bsd} */
int send_fd (int, int);   /* {Progs sendfd_svr
        4 se
        dfd_43bsd} */
int send_err (int, int, const char *); /* {Prog senderr} */
int serv_listen (const char *); /* {Progs servlisten_svr4 se
        rvli
        ten_4
        4bsd} */
int serv_accept (int, uid_t *); /* {Progs servaccept_svr4 se
        rvac
        ept_4
        4bsd} */
int cli_conn (const char *); /* {Progs cliconn_svr4 clico
        nn_4
        bsd} */
int buf_args (char *, int (*func) (int, char **));

   /* {
      Prog
      bufargs} */
int ptym_open (char *);   /* {Progs ptyopen_sv
        r4 p
        yopen_44bsd} */
int ptys_open (int, char *); /* {Progs ptyopen_svr4 ptyop
        en_4
        bsd} */

#ifdef   TIOCGWINSZ
pid_t pty_fork (int *, char *, const struct termios *, const struct winsize *); /* {Prog pty
              fork
            */

#endif /* */
int lock_reg (int, int, int, off_t, int, off_t);

   /* {
      Prog
      lockreg} */
#define read_lock(fd, offset, whence, len) \
   lock_reg (fd, F_SETLK, F_RDLCK, offset, whence, len)
#define readw_lock(fd, offset, whence, len) \
   lock_reg (fd, F_SETLKW, F_RDLCK, offset, whence, len)
#define write_lock(fd, offset, whence, len) \
   lock_reg (fd, F_SETLK, F_WRLCK, offset, whence, len)
#define writew_lock(fd, offset, whence, len) \
   lock_reg (fd, F_SETLKW, F_WRLCK, offset, whence, len)
#define un_lock(fd, offset, whence, len) \
   lock_reg (fd, F_SETLK, F_UNLCK, offset, whence, len)
pid_t lock_test (int, int, off_t, int, off_t);

   /* {
      Prog
      locktest} */
#define is_readlock(fd, offset, whence, len) \
   lock_test (fd, F_RDLCK, offset, whence, len)
#define is_writelock(fd, offset, whence, len) \
      lock_test (fd, F_WRLCK, offset, whence, len)
void err_dump (const char *, ...); /* {App misc_source} */
void err_msg (const char *, ...);
void err_quit (const char *, ...);
void err_ret (const char *, ...);
void err_sys (const char *, ...);
void log_msg (const char *, ...); /* {App misc_source} */
void log_open (const char *, int, int);
void log_quit (const char *, ...);
void log_ret (const char *, ...);
void log_sys (const char *, ...);
void TELL_WAIT (void);   /* parent/child from {Sec race_condi
        tion
        } */
void TELL_PARENT (pid_t);
void TELL_CHILD (pid_t);
void WAIT_PARENT (void);
void WAIT_CHILD (void);

#endif /* __ourhdr_h */

